// 配置 axios
import axios from "axios";
import router from  '@/router'



let http = axios.create({
    withCredentials: true,  //允许传递 cookie
    baseURL: 'http://localhost:8080/web'
})


//service  拦截器


// 添加请求拦截器
http.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    // console.log("请求拦截器")
    return config;
}, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
});

// 添加响应拦截器
http.interceptors.response.use(function (response) {
    // 对响应数据做点什么
    // console.log("响应拦截器");


    // console.log("router",router);


    let {status, data} = response
    if (status == 200) {  //表示  网络请求请求成功了
        /***
         * data {
         *   code : 响应的代码   404 500   200
         *   msg: 失败的原因
         *   data:  在200的情况下返回的数据
         *
         * }
         */
        let {code, msg} = data
        if (code == 200) {
            console.log("拦截器", data);
            return data.data;
        } else if (code == 401) {
            alert(msg || "未登录");

            // console.log("router",router)
            router.replace({path:'/login'})
            //需要编写代码重新登录
            return  ;
        } else if (code == 404) {
            alert(msg || "请求地址异常");
            return ;
        } else if (code == 500) {
            alert(msg || "服务器异常");
            return ;
        }

    }


    return response;
}, function (error) {
    // 对响应错误做点什么
    return Promise.reject(error);
});


interface Result<T> {
    code: number;
    msg?: string;
    data?: T
}

/***
 * {{
 *     data:{}
 * }}
 */
const service = {


    get<T>(url: string, config?: axios.AxiosRequestConfig): Promise<T> {
        return http.get<T , Result<T>>(url,config );
    },
    post<T>(url: string, config?: axios.AxiosRequestConfig): Promise<T> {
        return http.get<T, Result<T>>(url, config);
    }

}


export {service}


